用Python识别图形验证码,实现自动登陆! |
您所在的位置:网站首页 › python 验证码图片 模拟登录 › 用Python识别图形验证码,实现自动登陆! |
有态度地学习 验证码有图形验证码、极验滑动验证码、点触验证码、宫格验证码。这回重点讲讲图形验证码的识别。 虽说图形验证码最简单,但是对于我这等新手,还是要苦学一番。首先寻找测试网站,网站选的是如云阁小说网,小网站不怕被封。他们的验证码一般如下: 可以看出有微弱的干扰线和较强的干扰点,验证码是没有边框的,这里为了排版好看,我加上去的... 1. 灰度处理 把彩色验证码图片转为灰色的图片。 import cv2image = cv2.imread('1.jpeg', 0)cv2.imwrite('1.jpg', image) 2. 二值化处理 将图片处理为只有黑白两色的图片,这里发现干扰线没有了,这就意味着我们只需要处理干扰点即可。 import cv2image = cv2.imread('1.jpeg', 0)ret, image = cv2.threshold(image, 100, 255, 1)height, width = image.shapenew_image = image[0:height, 0:150]cv2.imwrite('1.jpg', new_image) 3. 降噪处理 去除小黑点,也就是孤立的黑色像素点。 点降噪原理就是检测黑色点相邻的8个点,判断8个点的颜色情况。如果全是白点,那么就认为这个点是白色的,做黑点变白点处理。如⑤点处,以田字格来看,相邻共有8个区域。 ①②③点坐标如下图,同理可知④⑤⑥⑦⑧⑨点坐标情况 降噪代码如下: import cv2import numpy as npfrom PIL import Imagedef inverse_color(image, col_range): # 读取图片,0意味着图片变为灰度图 image = cv2.imread(image, 0) # 图片二值化,100为设置阀值,255为最大阀值,1为阀值类型,当前点值大于阀值,设置为0,否则设置为255。ret是return value缩写,代表当前的阀值 ret, image = cv2.threshold(image, 110, 255, 1) # 图片的高度和宽度 height, width = image.shape # 图片反色处理,原因:上面的处理只能生成白字黑底的图片,而我们需要的是黑字白底的图片 img2 = image.copy() for i in range(height): for j in range(width): img2[i, j] = (255 - image[i, j]) img = np.array(img2) # 对处理后的图片做截取 height, width = img.shape new_image = img[0:height, col_range[0]:col_range[1]] cv2.imwrite('handle_one.png', new_image) image = Image.open('handle_one.png') return imagedef clear_noise(img): # 图片降噪处理 x, y = img.width, img.height for i in range(x): for j in range(y): if sum_9_region(img, i, j) div.main > div > form > ul > li:nth-child(5) > input[type="submit"]'))) button_2.click() time.sleep(5) else: return auto_login()def handle_verification_code(img): img = inverse_color(img, (0, 160)) img = clear_noise(img) return imgdef main(): auto_login()if __name__ == '__main__': main() # 结束程序 exit() 这里用会声会影给视频加了个BGM,不过结尾的时候不是很搭,水平有限呐!还是得好好多学习。视频如下: 公众号回复自动登陆。获取验证码图片和全部源码。 觉得文章不错的,文末点个赞,比心!!! ··· END ··· |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |